package com.wxdc.nmgyt.nmgytwydc.http.api;

import com.wxdc.nmgyt.nmgytwydc.model.AccountBean;
import com.wxdc.nmgyt.nmgytwydc.model.BASE_WORKFLOWCURRENT;
import com.wxdc.nmgyt.nmgytwydc.model.COMMIT_AUDIT;
import com.wxdc.nmgyt.nmgytwydc.model.CbYfInfoBean;
import com.wxdc.nmgyt.nmgytwydc.model.CodeBean;
import com.wxdc.nmgyt.nmgytwydc.model.GmYfInfoBean;
import com.wxdc.nmgyt.nmgytwydc.model.JcdInfoBean;
import com.wxdc.nmgyt.nmgytwydc.model.UserLoginBean;
import com.wxdc.nmgyt.nmgytwydc.model.YdInfoBean;
import com.wxdc.nmgyt.nmgytwydc.model.backresult.AuditResultBean;
import com.wxdc.nmgyt.nmgytwydc.model.backresult.AuditRolResultBean;
import com.wxdc.nmgyt.nmgytwydc.model.backresult.UserLoginResultBean;
import com.wxdc.nmgyt.nmgytwydc.model.PicUploadStateBean;
import com.wxdc.nmgyt.nmgytwydc.model.SCommitDataBean;
import com.wxdc.nmgyt.nmgytwydc.model.UserInfoBean;
import com.wxdc.nmgyt.nmgytwydc.model.backresult.UserRolResultBean;
import com.wxdc.nmgyt.nmgytwydc.model.backresult.ValidateJcdInfoResultBean;
import com.wxdc.nmgyt.nmgytwydc.model.backresult.YdAddresultBean;
import com.wxdc.nmgyt.nmgytwydc.model.backresult.YdEditResultBean;
import com.wxdc.nmgyt.nmgytwydc.model.backresult.YfEditResultBean;
import com.wxdc.nmgyt.nmgytwydc.model.backresult.YfRemoveReusltBean;
import com.wxdc.nmgyt.nmgytwydc.utils.SharedPreferenceUtil;

import java.util.List;
import java.util.Map;

import io.reactivex.Observable;
import okhttp3.MultipartBody;
import okhttp3.RequestBody;
import okhttp3.ResponseBody;
import retrofit2.http.Body;
import retrofit2.http.DELETE;
import retrofit2.http.GET;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.PUT;
import retrofit2.http.Part;
import retrofit2.http.PartMap;
import retrofit2.http.Query;

/**
 * Created by Administrator on 2018/4/18.
 * 在每个入参前还多了一个注解。比如第一个入参@Query("q") String name，Query表示把你传入的字段拼接起来
 * 这个url需要几个入参你就在这个方法中定义几个入参，每个入参前都要加上Query注解
 *
 * @GET("book/search") Call<Book> getSearchBook(@Query("q") String name);//name由调用者传入
 * @GET("book/search?q=name") Call<Book> getSearchBook();
 * **********************************************************
 * 如果入参比较多，就可以把它们都放在Map中
 * @GET("book/search") Call<Book> getSearchBook(@QueryMap Map<String, String> options);
 * ***********************************************************
 * 用于替换url中某个字段
 * @GET("group/{id}/users") Call<Book> groupList(@Path("id") int groupId);
 * *******************************************************
 * 指定一个对象作为HTTP请求体
 * @POST("users/new") Call<User> createUser(@Body User user);
 * 它会把我们传入的User实体类转换为用于传输的HTTP请求体，进行网络请求
 * **********************************************************
 * 传送表单数据
 * @FormUrlEncoded
 * @POST("user/edit") Call<User> updateUser(@Field("first_name") String first, @Field("last_name") String last);
 */

/**
 * //拼接一个URL然后进行网络请求
 * //这里我们拼接的URL就是 完整URL:https://api.douban.com/v2/book/search?q=xxx&tag=&start=0&count=1;
 * //每个URL前面都是以http://www.jianshu.com/开头,我们把这个不变的部分，也叫做baseUrl提出来，放到另一个地方,在下面我们会提到
 */
public interface RetrofitService {
    String HTTP_URL = SharedPreferenceUtil.getHttp();// 例: http://192.168.0.104:9100
    String HOST_BASE = HTTP_URL+"/";// baseUrl 中的路径(path)必须以 / 结束
    String WZAPI = "api/wz.api/";//物种库接口
    String DMDCAPI = "api/EGS.API/";//地面调查接口
    //String TESTAPI = "jczsts.EG.WebAPI/api/"; //暂时使用谷小艳前期接口
    String LOGINAPI = "mapi/US.API/";//用户登录使用
    /**
     * 查询用户信息
     *
     * @param name
     * @return
     */
    @GET("")
    Observable<UserInfoBean> getSerachUsers(@Query("name") String name);

    /**
     * 用户登录
     * @param loginBean
     * @return {"code":"200","sid":"jczuser-194b7320-b3bd-4dac-878d-8da5fe9d7856","jwt":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJpc3MiOiJ0ZXN0MSIsInN1YiI6bnVsbCwiUm9sZSI6IiIsImp0aSI6IjdmMzQ4MzUwLTgzOWMtNDQ5OS1hNjUyLTM5OGViNTBhOWNkNyIsImV4cCI6IlwvRGF0ZSgxNTM3OTM4MDA3OTM3KVwvIiwiaWF0IjoiXC9EYXRlKDE1Mzc5MzA4MDc5MzcpXC8iLCJJZCI6IjlhMGZhZDU3LTdjM2UtNGU2OC05Yzk3LTA2MzI5ZTMxZThkMSJ9.0nu2EKpvyzwoJYISL9blhe0fNC-lWmBTR9XCuRMOn1EuGwX2dK8CNGU72acWv8aLfpsPnYu2jzTh7Gy0EYNTyw","reMessage":"用户注册成功！"}
     */
    @POST(LOGINAPI+"Auth/login")
    Observable<UserLoginResultBean>  userLogin(@Body UserLoginBean loginBean);

    /**
     * 用户角色权限查询
     * @param sid  "jczuser-194b7320-b3bd-4dac-878d-8da5fe9d7856"
     * @return {"code":"200","rol":"","jwt":"","reMessage":"用户注册成功！"}
     */
    @GET(DMDCAPI+"Login")
    Observable<UserRolResultBean> userRolQuery(@Query("id") String sid);
    /**
     * @param name
     * @param pwd
     * @return
     */
    @POST(DMDCAPI+"UserManager/getAreaList")
    Observable<List<AccountBean>> postLogin(@Query("code") String name, @Query("level") String pwd);


    /**
     * 查询该用户下的监测点信息
     * 根据登陆token获得用户操作的监测点
     * @return
     */
    @GET(DMDCAPI+"Gempoint")
    Observable<List<JcdInfoBean>> getJcdInfos();

    /**
     * 获取代码表
     * @return
     */
    @GET(DMDCAPI+"Code")
    Observable<List<CodeBean>> requestAllCode();
    /*
    * 多图片上传
    * */
    @Multipart
    @POST(DMDCAPI+"Upload")
    Observable<List<PicUploadStateBean>> multiUpLoadPics(@PartMap Map<String, RequestBody> maps);
    /*
    * 单张图片上传
    * */
    @Multipart
    //@POST("GemzName")//-------gxy
    @POST(DMDCAPI+"Upload")
    //Observable<ResponseBody> upLoadPic(@Part MultipartBody.Part img);
    Observable<PicUploadStateBean> singleUpLoadPic(@Part MultipartBody.Part img);

    /*
    * 数据上传
    * */
    //@POST(TESTAPI+"SaveNoSubmit")
    Observable<ResponseBody> uploadData(@Body List<SCommitDataBean> obj, @Query("curtUserid") String curtUserid , @Query("upUserid") String upUserid );

    /**
     * 样地信息反馈
     * @param obj 样地信息Bean
     * @return
     */
    @POST(DMDCAPI+"jc")
    Observable<ResponseBody> commitFeedBackData(@Body JcdInfoBean obj);

    /**
     * 获取最新公告内容
     * @return
     */
    @GET(DMDCAPI+"test")
    Observable<String> getNoticeContent();
    /**
     * 验证该监测点是否已经录入信息
     * @param gempoitid 监测点编号
     * @return
     */
    @GET(DMDCAPI+"Validate")
    Observable<ValidateJcdInfoResultBean> validateJcdExistInfo(@Query("id") String gempoitid);
    //------------------------------------样地------------------------------------------------
    /**
     * 样地查询
     * @param sampleplotid
     * @return
     */
    @GET(DMDCAPI+"SampleArea")
    Observable<ResponseBody> queryYdInfoByFk(@Query("id") String sampleplotid);

    /**
     * 添加样地信息表内容
     * @param obj
     * @return
     */
    @POST(DMDCAPI+"SampleArea")
    Observable<YdAddresultBean> insertYdInfoTab(@Body YdInfoBean obj);

    /**
     * 修改样地信息表内容
     * @param obj
     * @return
     */
    @PUT(DMDCAPI+"SampleArea")
    Observable<YdAddresultBean> updateYdInfoTab(@Body YdInfoBean obj);

    /**
     * 删除样地信息
     * @param sampleplotid
     * @return
     */
    @DELETE(DMDCAPI+"SampleArea")
    Observable<YdEditResultBean> deleteYdInfoTab(@Query("id") String sampleplotid);
    //-----------------------------草本--------------------------------------------------------
    /**
     * 草本样方查询(注：如果要查询一个样地下的所有样方，可以输入样地编号)
     * @param sampleplotid/样方id
     * @return
     */
    @GET(DMDCAPI+"GrassQuadrat")
    Observable<List<CbYfInfoBean>> queryCbYfFun(@Query("id") String sampleplotid);

    /**
     * 新增草本样方
     * @param obj
     * @return
     */
    @POST(DMDCAPI+"GrassQuadrat")
    Observable<YfEditResultBean> insertCbyfFun(@Body CbYfInfoBean obj);

    /**
     * 修改草本样方
     * @param obj
     * @return
     */
    @PUT(DMDCAPI+"GrassQuadrat")
    Observable<YfEditResultBean> updateCbyfFun(@Body CbYfInfoBean obj);

    /**
     * 删除草本样方
     * @param grassid
     * @return
     */
    @DELETE(DMDCAPI+"GrassQuadrat")
    Observable<YfRemoveReusltBean> deleteCbyfFun(@Query("id") String grassid);
    //--------------------------------灌木------------------------------------------
    /**
     * 如果要查询一个样地下的所有样方，可以输入样地编号
     * @param sampleplotid
     * @return
     */
    @GET(DMDCAPI+"ShrubQuadrat")
    Observable<List<GmYfInfoBean>> queryGmyfFun(@Query("id") String sampleplotid);

    /**
     * 添加灌木样方
     * @param obj
     * @return
     */
    @POST(DMDCAPI+"ShrubQuadrat")
    Observable<YfEditResultBean> insertGmyfFun(@Body GmYfInfoBean obj);

    /**
     * 修改灌木样方
     * @param obj
     * @return
     */
    @PUT(DMDCAPI+"ShrubQuadrat")
    Observable<YfEditResultBean> updateGmyfFun(@Body GmYfInfoBean obj);

    /**
     * 删除灌木样方
     * @param gmid
     * @return
     */
    @DELETE(DMDCAPI+"ShrubQuadrat")
    Observable<YfRemoveReusltBean> deleteGmyfFun(@Query("id") String gmid);

    /**
     *获取当前用户的审核权限
     * @return
     */
    @GET(DMDCAPI+"AuditingSearch")
    Observable<List<AuditRolResultBean>> getCurtUserAuditRol();

    /**
     * 审核数据查询
     * @param id(0:是待审和退回的数据；1：是当前用户审核完成的数据)
     * @return
     */
    @GET(DMDCAPI+"CurrentReview")
    Observable<List<BASE_WORKFLOWCURRENT>> queryAuditData(@Query("id") int id);

    /**
     * 提交审核状态
     * @param bean
     * @return
     */
    @POST(DMDCAPI+"CurrentReview")
    Observable<AuditResultBean> commitAudit(@Body COMMIT_AUDIT bean);
}
